package cn.larry.aop.config.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SystemArchitecture {

    /**
     * 在cn.larry.aop.web 包及其子包中！
     */
    @Pointcut("within(cn.larry.aop.web..*)")
    public void inWebLayer() {}

    /**
     * 在cn.larry.aop.service 包及其子包中！
     */
    @Pointcut("within(cn.larry.aop.service..*)")
    public void inServiceLayer() {}

    /**
     * 在cn.larry.aop.dao 包及其子包中！
     */
    @Pointcut("within(cn.larry.aop.dao..*)")
    public void inDataAccessLayer() {}

    /**
     * business service是指定义在service接口中的任意方法的执行。该定义假定了接口放在service包中，其实现在子包中。
     *
     * 如果你是以功能来对service接口进行分组（例如cn.larry.aop.abc.service and cn.larry.aop.def.service），
     * 那可以使用"execution(* cn.larry.aop..service.*.*(..))"。
     *
     * 或者，可以使用bean PCD，如"bean(*Service)"。
     */
    @Pointcut("execution(* cn.larry.aop..service.*.*(..))")
    public void businessService() {}

    /**
     * 数据访问操作是指定义在dao接口中的任意方法的执行。该定义假定了接口是放在dao包中，其实现在子包中。
     */
    @Pointcut("execution(* cn.larry.aop.dao.*.*(..))")
    public void dataAccessOperation() {}

}